//package com.mcb.autopublish.demos.vedio;
//
//import org.jcodec.api.SequenceEncoder;
//import org.jcodec.api.awt.AWTSequenceEncoder;
//import org.openqa.selenium.*;
//import org.openqa.selenium.chrome.ChromeDriver;
//import org.openqa.selenium.chrome.ChromeOptions;
//import org.openqa.selenium.support.ui.ExpectedConditions;
//import org.openqa.selenium.support.ui.WebDriverWait;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.PostConstruct;
//import java.awt.*;
//import java.awt.image.BufferedImage;
//import java.io.File;
//import java.nio.file.Paths;
//import java.time.LocalDate;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.concurrent.TimeUnit;
//
//@Service
//public class DouyinAutoPublishService {
//
//    @Value("${selenium.chrome.driver}")
//    private String chromeDriverPath;
//
//    @Value("${selenium.chrome.user-data-dir}")
//    private String userDataDir;
//
//    @Value("${douyin.video.output-path}")
//    private String outputVideoPath;
//
//    @Value("${douyin.upload.url}")
//    private String douyinUploadUrl;
//
//    private static final int VIDEO_FRAMES = 300;
//    private static final int RETRY_COUNT = 3;
//    private static final long RETRY_DELAY_SECONDS = 10;
//
//    @PostConstruct
//    public void init() {
//        System.setProperty("webdriver.chrome.driver", chromeDriverPath);
//    }
//
//    @Scheduled(cron = "${douyin.publish.cron:0 0 10 * * ?}") // 默认每天10点
//    public void autoPublish() {
//        for (int attempt = 1; attempt <= RETRY_COUNT; attempt++) {
//            try {
//                generateDailyVideo();
//                publishToDouyin();
//                return; // 成功则退出
//            } catch (Exception e) {
//                System.err.println("抖音发布失败，尝试 #" + attempt + ": " + e.getMessage());
//                if (attempt < RETRY_COUNT) {
//                    try {
//                        TimeUnit.SECONDS.sleep(RETRY_DELAY_SECONDS);
//                    } catch (InterruptedException ie) {
//                        Thread.currentThread().interrupt();
//                    }
//                }
//            }
//        }
//        System.err.println("所有重试均失败，请手动处理");
//    }
//
//    private void generateDailyVideo() throws Exception {
//        File outputFile = new File(outputVideoPath);
//        if (outputFile.exists()) {
//            outputFile.delete(); // 删除旧视频
//        }
//        outputFile.getParentFile().mkdirs(); // 确保目录存在
//
//        // 使用更现代的 AWTSequenceEncoder
//        AWTSequenceEncoder encoder = null;
//        try {
//            // 使用 AWTSequenceEncoder 替代 SequenceEncoder
//            encoder = AWTSequenceEncoder.createSequenceEncoder(outputFile, 30);
//
//            for (int i = 0; i < VIDEO_FRAMES; i++) {
//                BufferedImage frame = new BufferedImage(1080, 1920, BufferedImage.TYPE_INT_RGB);
//                Graphics2D g = frame.createGraphics();
//
//                // 设置抗锯齿
//                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//
//                // 渐变背景
//                Color startColor = new Color(70, 130, 180); // 钢蓝色
//                Color endColor = new Color(135, 206, 250);  // 浅天蓝色
//                GradientPaint gradient = new GradientPaint(0, 0, startColor, 1080, 1920, endColor);
//                g.setPaint(gradient);
//                g.fillRect(0, 0, 1080, 1920);
//
//                // 添加文字
//                g.setColor(Color.WHITE);
//                g.setFont(new Font("微软雅黑", Font.BOLD, 70));
//                String title = "每日精选 - " + LocalDate.now();
//                int titleWidth = g.getFontMetrics().stringWidth(title);
//                g.drawString(title, (1080 - titleWidth) / 2, 500);
//
//                g.setFont(new Font("微软雅黑", Font.PLAIN, 45));
//                g.drawString("自动生成视频内容", 360, 600);
//
//                // 添加装饰元素
//                g.setColor(new Color(255, 255, 255, 120));
//                for (int j = 0; j < 8; j++) {
//                    int size = 30 + (int) (Math.random() * 80);
//                    int x = (int) (Math.random() * 1000);
//                    int y = (int) (Math.random() * 1800);
//                    g.fillOval(x, y, size, size);
//                }
//
//                // 使用正确的编码方法
//                encoder.encodeImage(frame);
//                g.dispose();
//            }
//            System.out.println("视频生成完成: " + outputVideoPath);
//        } finally {
//            if (encoder != null) {
//                encoder.finish();
//            }
//        }
//    }
//
//    private void publishToDouyin() {
//        ChromeOptions options = new ChromeOptions();
//        options.addArguments("--disable-notifications");
//        options.addArguments("--no-sandbox");
//        options.addArguments("--disable-dev-shm-usage");
//        options.addArguments("--user-data-dir=" + userDataDir);
//        options.addArguments("--headless=new"); // 无头模式
//
//        WebDriver driver = null;
//        try {
//            driver = new ChromeDriver(options);
//            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
//            WebDriverWait wait = new WebDriverWait(driver, 60);
//
//            // 跳转到上传页面
//            driver.get(douyinUploadUrl);
//
//            // 等待上传区域
//            wait.until(ExpectedConditions.visibilityOfElementLocated(
//                    By.cssSelector("div.upload--uploadArea--uZ5pB, div.upload-area")
//            ));
//
//            // 上传视频文件
//            WebElement fileInput = driver.findElement(By.cssSelector("input[type='file']"));
//            fileInput.sendKeys(Paths.get(outputVideoPath).toAbsolutePath().toString());
//
//            // 等待转码完成
//            wait.until(ExpectedConditions.invisibilityOfElementLocated(
//                    By.cssSelector(".upload_progress, .upload-progress")
//            ));
//
//            // 填写描述信息
//            WebElement captionInput = wait.until(ExpectedConditions.elementToBeClickable(
//                    By.cssSelector("[data-e2e='video-title-input'], textarea.title-input")
//            ));
//            captionInput.clear();
//            captionInput.sendKeys("#每日更新 #自动生成 " + LocalDate.now());
//
//            // 点击发布按钮
//            WebElement publishBtn = wait.until(ExpectedConditions.elementToBeClickable(
//                    By.cssSelector("button[data-e2e='publish-btn'], button.publish-button")
//            ));
//            publishBtn.click();
//
//            // 验证发布结果
//            wait.until(d -> {
//                try {
//                    WebElement successElement = d.findElement(By.cssSelector(".zone-container-title, .success-message"));
//                    if (successElement.getText().contains("发布成功")) {
//                        return true;
//                    }
//                } catch (NoSuchElementException ignored) {}
//
//                try {
//                    WebElement errorElement = d.findElement(By.cssSelector(".error-message, .upload-fail"));
//                    throw new RuntimeException("发布失败：" + errorElement.getText());
//                } catch (NoSuchElementException ignored) {}
//
//                return false;
//            });
//
//            System.out.println("抖音视频发布成功！");
//
//        } catch (Exception e) {
//            // 错误截图
//            if (driver != null) {
//                try {
//                    File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
//                    String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss"));
//                    new File("logs/douyin_errors").mkdirs();
//                    screenshot.renameTo(new File("logs/douyin_errors/error_" + timestamp + ".png"));
//                } catch (Exception ex) {
//                    System.err.println("截图保存失败: " + ex.getMessage());
//                }
//            }
//            throw new RuntimeException("抖音发布失败: " + e.getMessage(), e);
//        } finally {
//            if (driver != null) {
//                try {
//                    driver.quit();
//                } catch (Exception e) {
//                    System.err.println("关闭浏览器时出错: " + e.getMessage());
//                }
//            }
//        }
//    }
//}